﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Drawing;

namespace Mosaik_complete_
{
    class Bildmanipulationen
    {
        /// <summary>
        /// passt bild an das format 500x500 an
        /// und speichert dieses in den gleichnamigen ordner
        /// </summary>
        /// <param name="pfad">absoluten pfad zu dem bild</param>
        public static void zuschneiden_zu_500x500(string pfad)
        {
            Bitmap bild = new Bitmap(Bitmap.FromFile(pfad));

            float div_height = ((float)bild.Height / 500);
            float div_width = ((float)bild.Width / 500);


            if ((bild.Height <= 400) || (bild.Width <= 400))
                return;
            if ((div_width <= 1) || (div_height <= 1))
                bild = new Bitmap(bild, Convert.ToInt32(bild.Width * 1.4), Convert.ToInt32(bild.Height * 1.4));
            else
            {
                if (div_height <= div_width)
                    bild = new Bitmap(bild, Convert.ToInt32(bild.Width / div_height), Convert.ToInt32(bild.Height / div_height));
                if (div_width <= div_height)
                    bild = new Bitmap(bild, Convert.ToInt32(bild.Width / div_width), Convert.ToInt32(bild.Height / div_width));
            }

            Bitmap bild_new = new Bitmap(500, 500);
            int horizontal = (bild.Height / 2) - 250;
            for (int hoehe = 0; hoehe < 500; hoehe++)
            {
                int vertikal = (bild.Width / 2) - 250;
                for (int breite = 0; breite < 500; breite++)
                {
                    bild_new.SetPixel(breite, hoehe, bild.GetPixel(vertikal, horizontal));
                    vertikal++;
                }
                horizontal++;
            }

            if (!(Directory.Exists("500x500"))) Directory.CreateDirectory("500x500");
            string[] dateinummer = Directory.GetFiles("500x500");
            bild_new.Save("500x500/" + (dateinummer.Length + 1) + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

            bild.Dispose();
            bild_new.Dispose();
        }

        /// <summary>
        /// schneidet bilder zu einer angegebenen größe zu
        /// und speichert dieses in den gleichnamigen ordner
        /// </summary>
        /// <param name="pfad_quellbild"></param>
        /// <param name="groesse">nur kleiner gleich 500</param>
        public static void bild_zuschneiden(string pfad_quellbild, int groesse)
        {
            Bitmap bild = new Bitmap(pfad_quellbild);
            Bitmap zwischenbild = null;

            float mult_heigh = ((float)groesse / (float)bild.Height);
            float mult_width = ((float)groesse / (float)bild.Width);

            if (mult_heigh < mult_width)
            {
                bild = new Bitmap(bild, new Size((int)(bild.Width * mult_heigh), (int)(bild.Height * mult_heigh)));
                zwischenbild = new Bitmap(bild.Width, bild.Width);
            }
            else
            {
                bild = new Bitmap(bild, new Size((int)(bild.Width * mult_width), (int)(bild.Height * mult_width)));               
                zwischenbild = new Bitmap(bild.Height, bild.Height);
            }

            int x_mitte = bild.Width / 2;
            int y_mitte = bild.Height / 2;

            if (bild.Width < bild.Height)
            {
                int x_anfang = 0;
                int y_anfang = y_mitte - x_mitte;
                int zwischenbild_y = 0;
                for (int y=y_anfang; zwischenbild_y<bild.Width; y++)
                {
                    int zwischenbild_x = 0;
                    for (int x=x_anfang; x<bild.Width; x++)
                    {
                        zwischenbild.SetPixel(zwischenbild_x,zwischenbild_y, bild.GetPixel(x, y));
                        zwischenbild_x++;
                    }
                    zwischenbild_y++;
                }
            }
            else
            {
                int x_anfang = x_mitte - y_mitte;
                int y_anfang = 0;
                int zwischenbild_y = 0;
                for (int y = y_anfang; y < bild.Height; y++)
                {
                    int zwischenbild_x = 0;
                    for (int x = x_anfang; zwischenbild_x < bild.Height; x++)
                    {
                        zwischenbild.SetPixel(zwischenbild_x, zwischenbild_y, bild.GetPixel(x, y));
                        zwischenbild_x++;
                    }
                    zwischenbild_y++;
                }
            }
            bild.Dispose();
            zwischenbild = new Bitmap(zwischenbild, new Size(groesse,groesse));

            string ordner = groesse + "x" + groesse;
            if (!(Directory.Exists(ordner))) Directory.CreateDirectory(ordner);
            string[] dateinummer = Directory.GetFiles(ordner);
            zwischenbild.Save(ordner + "/" + (dateinummer.Length + 1) + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

            zwischenbild.Dispose();
        }
    }
}
